package net.jcip.examples.chapter6.thread.ExecutorService.ExecutorServiceImpl;


import java.time.LocalTime;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * ✅ 特点
 * 	•	用于 定时任务 或 周期性任务；
 * 	•	可替代 Timer，功能更强；
 * 	•	支持固定速率（rate）与固定延时（delay）。
 *
 * 📌 使用场景
 * 	•	定时数据同步；
 * 	•	监控、心跳检测；
 * 	•	定期清理缓存、日志等。
 */
public class ScheduledExecutorServiceTest {

    public static void main(String[] args) {
        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2);

        // 延迟执行任务
        // schedule(Runnable command, long delay, TimeUnit unit)
        scheduler.schedule(() -> {
            System.out.println("延迟2秒执行任务");
        }, 2, TimeUnit.SECONDS);



        // 周期性任务（每隔3秒执行一次）
        // scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
        // 以固定频率执行任务（period 表示任务开始时间之间的间隔）。如果上一次任务执行时间超过 period，会导致任务“堆积”。
        scheduler.scheduleAtFixedRate(() -> {
            System.out.println("固定频率执行任务：" + System.currentTimeMillis());
        }, 1, 3, TimeUnit.SECONDS);


        //以固定延时执行任务（delay 表示上一次任务完成后，再延迟多久执行下一次）。
        //scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
        scheduler.scheduleWithFixedDelay(() -> {
            System.out.println("上次任务结束后延迟2秒再执行");
        }, 1, 2, TimeUnit.SECONDS);





    }


    /**
     * 场景 1：定时任务调度（心跳检测）
     */
    private void heartBeatMonitor(){

        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2);

        scheduler.scheduleAtFixedRate(() -> {
            System.out.println(LocalTime.now() + " - 检测服务心跳...");
            // 模拟请求或Ping操作
            try {
                Thread.sleep(1000); // 模拟IO耗时
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        }, 0, 5, TimeUnit.SECONDS);
    }








}

